#include "app_message.h"

/**
 * @brief json字符串转换为字节数组
 *
 * @param json 字符串
 * @param bytes 字节数组
 * @param len 长度
 * @return int 返回值
 */
int app_message_jsonToBytes(char *json, char *bytes, int len)
{
    // 判断接收数组的长度合法
    if (len < 9)
    {
        log_error("数组容器的长度不合法");
        return -1;
    }
    // 将json字符串转换为cJSON对象
    cJSON *root = cJSON_Parse(json);
    if (root == NULL)
    {
        log_error("cJSON_Parse error");
        return -1;
    }
    // 获取参数 device_id target_angle max_speed
    uint8_t device_id = cJSON_GetObjectItem(root, "device_id")->valueint;
    float target_angle = (float)cJSON_GetObjectItem(root, "target_angle")->valuedouble;
    float max_speed = (float)cJSON_GetObjectItem(root, "max_speed")->valuedouble;
    // 拷贝数据
    memcpy(bytes, &device_id, 1);
    memcpy(bytes + 1, &target_angle, 4);
    memcpy(bytes + 5, &max_speed, 4);
    // 释放root内存
    cJSON_Delete(root);
    // 返回指定数据长度
    return 9;
}
/**
 * @brief 字节数组转换为json字符串
 *
 * @param bytes 字节数组
 * @param len 长度
 * @return char* json字符串
 */
char *app_message_bytesToJson(char *bytes, int len)
{
    // 判断数组数据的长度是否合法
    if (len < 7)
    {
        log_error("数组数据的长度不合法");
        return NULL;
    }
    // 获取参数 device_id cur_angle motor_status
    uint8_t device_id = bytes[0];
    float cur_angle = 0;
    char *motor_status = bytes[5] == 0 ? "off" : "on";
    memcpy(&cur_angle, bytes + 1, 4);
    // 创建json对象
    cJSON *root = cJSON_CreateObject();
    // 添加参数
    cJSON_AddNumberToObject(root, "device_id", device_id);
    cJSON_AddNumberToObject(root, "cur_angle", cur_angle);
    cJSON_AddStringToObject(root, "motor_status", motor_status);
    // 创建json字符串
    char *json = cJSON_PrintUnformatted(root);
    // 释放root内存
    cJSON_Delete(root);
    // 返回json字符串
    return json;
}
